package main.java.wrapper;

/*
        java有8个基本类型，他们是以"值"的形式存在，而非对象
        因此8个基本类型不具备面向对象的特性，对此比java提供了8个包装类
        目的是将基本类型以对象形式

        基本类型            包装类
          byte          java.lang.Byte
          short         java.lang.Short
          int           java.lang.Integer
          long          java.lang.Long
          float         java.lang.Float
          double        java.lang.Double
          char          java.lang.Character
          boolean       java.lang.Boolean

*/
public class IntegerDemo1{
    public static void main(String[] args) {
        //数值在-128---127之间，那么valueOf方法会重用对象
        int a = 101;
        //创建对象
        Integer i = new Integer(100);
        //创建对象
        Integer j = new Integer(200);
        //比较判断两个对象的值
        //// false, 因为它们是不同的对象
        System.out.println(i==j);
        //调用 i 对象的 equals 方法，传入 j 作为参数，并将判断结果输出到控制台
        System.out.println(i.equals(j));//false

        //double的valueOf方法就没有任何多余效果，就是new，但是我们依然建议使用value0f(不用记那些包装类有额外功能）
        //创建一个double 对象
        double d = 123.1253;
        //创建对象
        Double d1 = Double.valueOf(d);
        //创建对象
        Double d2 = Double.valueOf(d);
        //比较判断两个对象的值
        // // false, 因为它们是不同的对象
        System.out.println(d1 == d2);
        //调用 d1 对象的 equals 方法，传入 d2 作为参数，并将判断结果输出到控制台
        // true, 因为它们包含相同的值
        System.out.println(d1.equals(d2));

        //从包装类转换为基本类型
        //创建一个 Integer 对象 i1，它包装了整数 128
        Integer i1 = Integer.valueOf(128);
        //将 i1 对象转换为 int 类型
        int intValue = i1.intValue();
        //将结果输出到控制台，输出结果为 128
        System.out.println(intValue);
        //将 i1 对象转换为 double 类型
        double dou = i1.doubleValue();
        //将结果输出到控制台，输出结果为 128.0
        System.out.println(dou);
        //从大类型转换为小类型仍然存在溢出问题
        //将 i1 对象转换为 byte 类型
        byte b = i1.byteValue();
        //输出结果为 -128
        // 因为 byte 类型的范围是 -128 到 127
        // 而 i1 包装的整数 128 超出了 byte 类型的范围
        // 所以 b 的值为 -128
        System.out.println(b);

        //将 Double 对象 d1 转换为 int 类型
        //上面double中的数值定义为123.1253
        i = d1.intValue();
        //浮点数转换为整数仍然存在丢失精度问题，所以输出结果为123
        System.out.println(i);
        //将 Double 对象 d1 转换为 double 类型，不会存在丢失精度问题
        d = d1.doubleValue();
        //输出结果为 123.1253
        System.out.println(d);
    }
}
